home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / dottunnel / dottunnelfinished.s < prev   
Text File  |  1980-01-06  |  34KB  |  1,555 lines

  1. Track:    EQU    0
  2. NoOfRings:    EQU    40    ;40 A1200
  3.                 ;30 A500
  4. YSpace:    EQU    32
  5. Raster:    EQU    0
  6.  
  7.  
  8. MyDmacon=%01111100000
  9. ;         abcdefghhhh
  10. ; a = Blitter nasty
  11. ; b = Enable DMA activity (always set this!)
  12. ; c = Bitplane enable
  13. ; d = Copper enable
  14. ; e = Blitter enable
  15. ; f = Sprite enable
  16. ; g = Disk enable
  17. ; h = Audio channels enable
  18.  
  19. MyIntena=%100000000100000
  20. ;         abcdeeeefghijkl
  21. ; a = Enable interrupts
  22. ; b = Lev. 6 External interrupt
  23. ; c = Lev. 5 Disk sync found
  24. ; d = Lev. 5 Serial port receive buffer full
  25. ; e = Lev. 4 Audio ch. 3-0 block finished
  26. ; f = Lev. 3 Blitter finished
  27. ; g = Lev. 3 Vertical blank
  28. ; h = Lev. 3 Copper
  29. ; i = Lev. 2 I/O Ports and timers
  30. ; j = Lev. 1 Software
  31. ; k = Lev. 1 Disk block finished
  32. ; l = Lev. 1 Serial port transmit buffer empty
  33.  
  34.     JumpPtr    Begin
  35.  
  36. *******************************************************************************
  37. **Macros
  38. *******************************************************************************
  39. WaitBlt:    MACRO
  40. .vent\@:    if    Raster=1
  41.     move.w    #$fff,Color00+_Custom
  42.     endif
  43.     btst    #14,Dmaconr+_Custom
  44.     bne.b    .vent\@
  45.     if    Raster=1
  46.     move.w    #0,Color00+_Custom
  47.     endif
  48.     ENDM
  49.  
  50. SetInt:    MACRO
  51.     move.l    (Lev\1Base).w,OldIrq\1
  52.     move.l    #Lev\1Irq,(Lev\1Base).w
  53.     bra.b    jumpo\@
  54. OldIrq\1:    dc.l    0
  55. jumpo\@:
  56.     ENDM
  57.  
  58. ClrInt:    MACRO
  59.     move.l    OldIrq\1(pc),(Lev\1Base).w
  60.     ENDM
  61.  
  62. Push.l:    MACRO
  63.     movem.l    \1,-(sp)
  64.     ENDM
  65.  
  66. Push.w:    MACRO
  67.     movem.w    \1,-(sp)
  68.     ENDM
  69.  
  70. Pull.l:    MACRO
  71.     movem.l    (sp)+,\1
  72.     ENDM
  73.  
  74. Pull.w:    MACRO
  75.     movem.w    (sp)+,\1
  76.     ENDM
  77.  
  78. StartPrg:    MACRO
  79.     move.w    #$7fff,Intreq+_Custom
  80.     move.w    #MyDmacon+$8000,Dmacon+_Custom
  81.     move.w    #MyIntena+$8000,Intena+_Custom
  82.     ENDM
  83.  
  84. StopPrg:    MACRO
  85.     move.w    #$7fff,Intena+_Custom
  86.     move.w    #$7fff,Dmacon+_Custom
  87.     move.w    #$7fff,Intreq+_Custom
  88.     ENDM
  89.  
  90. StopSystem:    MACRO
  91.     move.w    Intenar+_Custom,OldIntena
  92.     move.w    Dmaconr+_Custom,OldDmacon
  93.     StopPrg
  94.     bra.b    jumpo\@
  95. OldIntena:    dc.w    0
  96. OldDmacon:    dc.w    0
  97. jumpo\@:
  98.     ENDM
  99.  
  100. StartSystem:    MACRO
  101.     move.w    OldDmacon(pc),d0
  102.     or.w    #$8000,d0
  103.     move.w    d0,Dmacon+_Custom
  104.     move.w    OldIntena(pc),d0
  105.     or.w    #$8000,d0
  106.     move.w    d0,Intena+_Custom
  107.     ENDM
  108.  
  109. ClearBss:    MACRO
  110.     lea    _Bss1Start,a0
  111.     move.l    #(_Bss1End-_Bss1Start)/4,d0
  112. .clrloop\@    clr.l    (a0)+
  113.     subq.l    #1,d0
  114.     bne.b    .clrloop\@
  115.     ENDM
  116.  
  117.  
  118.  
  119.  
  120. *******************************************************************************
  121. **
  122. **  Initialisering
  123. **
  124. *******************************************************************************
  125.     SECTION    DenFedeKode,code
  126.  
  127. Begin:    IFEQ    Track-0
  128.     Push.l    d0-a6
  129.     StopSystem
  130.     ELSE
  131.     move.l    #Lev3Irq,$64.w
  132.     rts
  133.     ENDC
  134.  
  135. **Init starter -----------------------------------
  136.     ClearBss    1
  137.     ClearBss    2
  138.  
  139.     bsr    ComputeColors
  140.     bsr    InitAGACopper
  141.     lea    ColorArray,a0
  142.     lea    AGA_Colors,a1
  143.     moveq    #0,d0
  144.     moveq    #7,d1
  145.     bsr    LoadAGACopper
  146.     bsr    Init_Rings
  147.     bsr    InitPerspTable
  148.     bsr    InitCodeBuffer
  149.  
  150.     IFEQ    Track-0
  151.     clr.l    0.w
  152.     SetInt    3
  153. **Init slutter -----------------------------------
  154.     WaitBlt
  155.     StartPrg
  156.  
  157.  
  158.  
  159. *******************************************************************************
  160. **
  161. **  Vent på exitsignal
  162. **
  163. *******************************************************************************
  164. WaitForExit:    tst.b    VBlank
  165.     beq.b    WaitForExit
  166.  
  167.     clr.b    VBlank
  168.     tst.b    IWantOut
  169.     bne.b    ExitToDos
  170.     bra.b    WaitForExit
  171.  
  172.  
  173.  
  174.  
  175. *******************************************************************************
  176. **
  177. **  Exit to AmigaDOS
  178. **
  179. *******************************************************************************
  180. ExitToDos:
  181.     StopPrg
  182.  
  183. **Exit starter -----------------------------------
  184.     move.w    #0,Copcon+_Custom
  185.     ClrInt    3
  186. **Exit slutter -----------------------------------
  187.  
  188.     StartSystem
  189.  
  190.     Pull.l    d0-a6
  191.     moveq    #0,d0
  192.     ENDC
  193.     rts
  194.  
  195.  
  196.  
  197. *******************************************************************************
  198. **
  199. **  Level 3 interrupt
  200. **
  201. *******************************************************************************
  202. Lev3Irq:    st    VBlank
  203.     push.l    d0-a6
  204. **Lev3irq starter --------------------------------
  205.     move.l    #Copper,Cop2lch+_Custom
  206.     move.w    #%10,Copcon+_Custom
  207.     move.w    d0,Copjmp2+_Custom
  208.  
  209.     lea    Routines(pc),a0
  210.     move.w    Status(pc),d0
  211.     add.w    d0,d0
  212.     add.w    d0,d0
  213.     move.l    (a0,d0.w),a0
  214.     jsr    (a0)
  215.  
  216. **Lev3irq slutter --------------------------------
  217.     IF    Raster=1
  218.     move.w    #$f00,Color00+_Custom
  219.     ENDIF
  220.     IF    Raster=1
  221.     move.w    #$00f,Color00+_Custom
  222.     ENDIF
  223.     move.b    $dff005,d0
  224.     lsl.w    #8,d0
  225.     move.b    $dff006,d0
  226.     cmp.w    MaxRast,d0
  227.     blt.b    .ud
  228.     move.w    d0,MaxRast
  229. .ud:
  230.     pull.l    d0-a6
  231.     IFEQ    Track-0
  232.     move.w    #$0020,Intreq+_Custom
  233.     ELSE
  234.     move.w    #$0004,Intreq+_Custom
  235.     ENDC
  236.     rte
  237.  
  238. Status:    dc.w    0
  239. Routines:    dc.l    FadeUp,RingHandler,FadeDown
  240.  
  241. RingHandler:    bsr    SwapScr
  242.     bsr    ClrScr
  243.     bsr    Storyboard
  244.     bsr    Draw_Rings
  245.     bsr    Move_Rings
  246.     rts
  247.  
  248.  
  249. *******************************************************************************
  250. **
  251. **  Storyboard
  252. **
  253. *******************************************************************************
  254. Storyboard:    move.w    Story,d0
  255.     beq.b    Story_00
  256.     subq.w    #1,d0
  257.     beq.b    Story_01
  258.     subq.w    #1,d0
  259.     beq.b    Story_02
  260.     rts
  261.  
  262. Story_00:    addq.w    #2,Ring_Max
  263.     cmp.w    #256,Ring_Max
  264.     bne.b    .not
  265.     addq.w    #1,Story
  266.     move.w    #10*50,Story_Pause
  267. .not    rts
  268.  
  269. Story_01:    subq.w    #1,Story_Pause
  270.     beq.b    .next
  271.     IFEQ    Track-0
  272.     btst    #6,$bfe001
  273.     beq.b    .next
  274.     ENDC
  275.     rts
  276. .next    addq.w    #1,Story
  277.     rts
  278.  
  279. Story_02:    addq.w    #2,Ring_Min
  280.     cmp.w    #256,Ring_Min
  281.     bne.b    .out
  282.     addq.w    #1,Status
  283. .out    rts
  284.  
  285. FadeUp:    move.l    #FadeCopper,Cop2lch+_Custom
  286.     move.w    d0,Copjmp2+_Custom
  287.  
  288.     move.w    mycol+2,d0
  289.     move.w    #$312,d1
  290.     bsr    fader
  291.     move.w    d0,mycol+2
  292.     cmp.w    #$312,d0
  293.     bne.b    .out
  294.     addq.w    #1,Status
  295. .out    rts
  296.     
  297. FadeDown:    move.l    #FadeCopper,Cop2lch+_Custom
  298.     move.w    d0,Copjmp2+_Custom
  299.  
  300.     move.w    mycol+2,d0
  301.     moveq    #0,d1
  302.     bsr    fader
  303.     move.w    d0,mycol+2
  304.     tst.w    d0
  305.     seq    IWantOut
  306.     rts
  307.     
  308.  
  309.  
  310.  
  311. **d0=fade from
  312. **d1=fade to
  313. **out: d0=newcol
  314. fader:    move.w    d0,d2
  315.     move.w    d1,d3
  316.     lsr.w    #8,d2
  317.     lsr.w    #8,d3
  318.     cmp.w    d2,d3
  319.     beq.b    .nored
  320.     blt.b    .redsub
  321.     add.w    #$100,d0
  322.     bra.b    .nored
  323. .redsub:    sub.w    #$100,d0
  324. .nored:    move.w    d0,d2
  325.     move.w    d1,d3
  326.     lsr.w    #4,d2
  327.     lsr.w    #4,d3
  328.     and.w    #$f,d2
  329.     and.w    #$f,d3
  330.     cmp.w    d2,d3
  331.     beq.b    .nogreen
  332.     blt.b    .greensub
  333.     add.w    #$10,d0
  334.     bra.b    .nogreen
  335. .greensub:    sub.w    #$10,d0
  336. .nogreen:    move.w    d0,d2
  337.     move.w    d1,d3
  338.     and.w    #$f,d2
  339.     and.w    #$f,d3
  340.     cmp.w    d2,d3
  341.     beq.b    .noblue
  342.     blt.b    .bluesub
  343.     addq.w    #$1,d0
  344.     bra.b    .noblue
  345. .bluesub:    subq.w    #$1,d0
  346. .noblue:    rts
  347.  
  348.  
  349. *******************************************************************************
  350. **
  351. **  Initialiser PerspTable
  352. **
  353. *******************************************************************************
  354. InitPerspTable:    lea    PerspTable,a0
  355.     move.w    #256-1,d7
  356. .loop    move.w    d7,d0
  357.     mulu    #190,d0
  358.     add.w    #6000,d0
  359.     move.l    #6000*255,d1
  360.     divu    d0,d1
  361.     move.w    d1,(a0)+
  362.     dbra    d7,.loop
  363.     rts
  364.  
  365.  
  366.  
  367.  
  368. *******************************************************************************
  369. **
  370. **  Draw all rings
  371. **
  372. *******************************************************************************
  373. Draw_Rings:    clr.w    Ring_Counter
  374. .next    lea    Ring_Array,a0
  375.     move.w    Ring_Counter,d0
  376.     mulu    #Ring_SIZEOF,d0
  377.     add.w    d0,a0
  378.     moveq    #0,d0
  379.     moveq    #0,d1
  380.     moveq    #0,d2
  381.     move.w    (a0)+,d1
  382.     move.b    (a0)+,d2
  383.     move.b    (a0)+,d0
  384.     cmp.w    Ring_Min,d0
  385.     blt.b    .dont
  386.     cmp.w    Ring_Max,d0
  387.     bgt.b    .dont
  388.  
  389.     ext.l    d1
  390.     move.w    d0,d3
  391.     not.b    d3
  392.     mulu    #3,d3
  393.     lsr.l    #8,d3
  394.     mulu    #(288+113+YSpace)*80,d3
  395.     add.l    d3,d1
  396.  
  397. ;    lea    PerspTable,a0
  398. ;    add.w    d0,d0
  399. ;    move.w    (a0,d0.w),d0
  400.     bsr    DrawCircle
  401. .dont    addq.w    #1,Ring_Counter
  402.     cmp.w    #NoOfRings,Ring_Counter
  403.     bne.b    .next
  404.     rts
  405.  
  406. Move_Rings:    lea    Ring_Array,a0
  407.     moveq    #0,d7
  408. .next    addq.b    #2,3(a0)
  409.     bcs.b    .ooops
  410.     addq.w    #4,a0
  411. .donext    addq.w    #1,d7
  412.     cmp.w    #NoOfRings,d7
  413.         bne.b    .next
  414.     rts
  415. .ooops    bsr    Init_OneRing
  416.     bra.b    .donext
  417.  
  418.  
  419. Init_Rings:    lea    Ring_Array,a0
  420.     moveq    #NoOfRings-1,d0        ;ringnumber
  421. .next    bsr    Init_OneRing
  422.     move.w    #256,d1
  423.     mulu    d0,d1
  424.     divu    #NoOfRings,d1
  425.     move.b    d1,-1(a0)
  426.     subq.w    #1,d0
  427.     bge.b    .next
  428.     rts
  429.  
  430. Init_OneRing:    lea    Tunnel_YTab,a1
  431.     add.w    Tunnel_YTabPtr,a1
  432.     move.w    (a1),d2
  433.     lea    Tunnel_XTab,a1
  434.     add.w    Tunnel_XTabPtr,a1
  435.     move.w    (a1),d3
  436.     addq.w    #2,Tunnel_YTabPtr
  437.     and.w    #128-1,Tunnel_YTabPtr
  438.     addq.w    #2,Tunnel_XTabPtr
  439.     and.w    #128-1,Tunnel_XTabPtr
  440.     move.w    d3,d4
  441.     asr.w    #3,d4
  442.     add.w    d4,d2
  443.     and.w    #7,d3
  444.     move.w    d2,(a0)+
  445.     move.b    d3,(a0)+
  446.     addq.w    #1,a0
  447.     rts
  448.  
  449.  
  450. **input:
  451. **  d0.w: size
  452. **  d1.l: byteoffset
  453. **  d2.w: bitoffset
  454. DrawCircle:    lea    CodeTable,a0
  455.     add.w    d0,d0
  456.     add.w    d0,d0
  457.     move.l    (a0,d0.w),JumpCode+2
  458.     move.w    #$4000,Intena+_Custom
  459.     move.l    a7,OldSP
  460.     move.l    Screen_Draw,a7
  461.     add.l    d1,a7
  462.     add.w    #144*80+22,a7
  463.     add.w    d2,d2
  464.     add.w    d2,d2
  465.     move.l    _BitJumps(PC,d2.w),a1
  466.     jmp    (a1)
  467.  
  468. _BitJumps:    dc.l    _Bit0,_Bit1,_Bit2,_Bit3,_Bit4,_Bit5,_Bit6,_Bit7
  469.  
  470. _Bit0:    move.l    a7,a0
  471.     move.l    a7,a1
  472.     move.l    a7,a2
  473.     move.l    a7,a3
  474.     move.l    a7,a4
  475.     move.l    a7,a5
  476.     move.l    a7,a6
  477.     moveq    #0,d0
  478.     moveq    #1,d1
  479.     moveq    #2,d2
  480.     moveq    #3,d3
  481.     moveq    #4,d4
  482.     moveq    #5,d5
  483.     moveq    #6,d6
  484.     moveq    #7,d7
  485.     jmp    JumpCode
  486. _Bit1:    lea    1(a7),a0
  487.     move.l    a7,a1
  488.     move.l    a7,a2
  489.     move.l    a7,a3
  490.     move.l    a7,a4
  491.     move.l    a7,a5
  492.     move.l    a7,a6
  493.     moveq    #7,d0
  494.     moveq    #0,d1
  495.     moveq    #1,d2
  496.     moveq    #2,d3
  497.     moveq    #3,d4
  498.     moveq    #4,d5
  499.     moveq    #5,d6
  500.     moveq    #6,d7
  501.     jmp    JumpCode
  502. _Bit2:    lea    1(a7),a0
  503.     move.l    a0,a1
  504.     move.l    a7,a2
  505.     move.l    a7,a3
  506.     move.l    a7,a4
  507.     move.l    a7,a5
  508.     move.l    a7,a6
  509.     moveq    #6,d0
  510.     moveq    #7,d1
  511.     moveq    #0,d2
  512.     moveq    #1,d3
  513.     moveq    #2,d4
  514.     moveq    #3,d5
  515.     moveq    #4,d6
  516.     moveq    #5,d7
  517.     jmp    JumpCode
  518. _Bit3:    lea    1(a7),a0
  519.     move.l    a0,a1
  520.     move.l    a0,a2
  521.     move.l    a7,a3
  522.     move.l    a7,a4
  523.     move.l    a7,a5
  524.     move.l    a7,a6
  525.     moveq    #5,d0
  526.     moveq    #6,d1
  527.     moveq    #7,d2
  528.     moveq    #0,d3
  529.     moveq    #1,d4
  530.     moveq    #2,d5
  531.     moveq    #3,d6
  532.     moveq    #4,d7
  533.     jmp    JumpCode
  534. _Bit4:    lea    1(a7),a0
  535.     move.l    a0,a1
  536.     move.l    a0,a2
  537.     move.l    a0,a3
  538.     move.l    a7,a4
  539.     move.l    a7,a5
  540.     move.l    a7,a6
  541.     moveq    #4,d0
  542.     moveq    #5,d1
  543.     moveq    #6,d2
  544.     moveq    #7,d3
  545.     moveq    #0,d4
  546.     moveq    #1,d5
  547.     moveq    #2,d6
  548.     moveq    #3,d7
  549.     jmp    JumpCode
  550. _Bit5:    lea    1(a7),a0
  551.     move.l    a0,a1
  552.     move.l    a0,a2
  553.     move.l    a0,a3
  554.     move.l    a0,a4
  555.     move.l    a7,a5
  556.     move.l    a7,a6
  557.     moveq    #3,d0
  558.     moveq    #4,d1
  559.     moveq    #5,d2
  560.     moveq    #6,d3
  561.     moveq    #7,d4
  562.     moveq    #0,d5
  563.     moveq    #1,d6
  564.     moveq    #2,d7
  565.     jmp    JumpCode
  566. _Bit6:    lea    1(a7),a0
  567.     move.l    a0,a1
  568.     move.l    a0,a2
  569.     move.l    a0,a3
  570.     move.l    a0,a4
  571.     move.l    a0,a5
  572.     move.l    a7,a6
  573.     moveq    #2,d0
  574.     moveq    #3,d1
  575.     moveq    #4,d2
  576.     moveq    #5,d3
  577.     moveq    #6,d4
  578.     moveq    #7,d5
  579.     moveq    #0,d6
  580.     moveq    #1,d7
  581.     jmp    JumpCode
  582. _Bit7:    lea    1(a7),a0
  583.     move.l    a0,a1
  584.     move.l    a0,a2
  585.     move.l    a0,a3
  586.     move.l    a0,a4
  587.     move.l    a0,a5
  588.     move.l    a0,a6
  589.     moveq    #1,d0
  590.     moveq    #2,d1
  591.     moveq    #3,d2
  592.     moveq    #4,d3
  593.     moveq    #5,d4
  594.     moveq    #6,d5
  595.     moveq    #7,d6
  596.     moveq    #0,d7
  597.     jmp    JumpCode
  598.  
  599. RestoreSP:    move.l    OldSP,a7
  600.     move.w    #$4000!$8000,Intena+_Custom
  601.     rts
  602.  
  603.  
  604.  
  605.  
  606. *******************************************************************************
  607. **
  608. **  Compute some colors
  609. **
  610. *******************************************************************************
  611. ComputeColors:    lea    ColorArray,a0
  612.     moveq    #0,d0
  613. .exanext    moveq    #0,d1
  614. .testigen    btst    d1,d0
  615.     bne.b    .found
  616.     addq.w    #1,d1
  617.     cmp.w    #3,d1
  618.     bne.b    .testigen
  619.     move.l    #$331122,d2
  620.     bra.b    .gotcolor
  621. .found    add.w    d1,d1
  622.     add.w    d1,d1
  623.     move.l    .colors(PC,d1.w),d2
  624. .gotcolor    move.l    d2,(a0)+
  625.     addq.w    #1,d0
  626.     cmp.w    #8,d0
  627.     bne.b    .exanext
  628.     rts
  629. .colors    dc.l    $ffbbff,$bb77aa,$774466
  630.  
  631.  
  632.  
  633.  
  634. *******************************************************************************
  635. **
  636. **  Fade 24bit colors
  637. **
  638. **  input:
  639. **  d0.l=source color
  640. **  d1.l=dest color
  641. **  d6.w=step
  642. **  d7.w=last step
  643. **
  644. **  output:
  645. **  d2.l=new color
  646. **
  647. **  trashed regs:
  648. **  d0-d6
  649. **
  650. *******************************************************************************
  651. FadeAGA:    move.l    d0,d2
  652.     move.l    d1,d3
  653.     swap    d2
  654.     swap    d3
  655.     sub.w    d2,d3
  656.     muls    d6,d3
  657.     divs    d7,d3
  658.     add.w    d2,d3
  659.     swap    d3
  660.     clr.w    d3        ;R
  661.     move.l    d0,d2
  662.     move.l    d1,d4
  663.     and.w    #$ff00,d2
  664.     and.w    #$ff00,d4
  665.     sub.w    d2,d4
  666.     lsr.w    #8,d4
  667.     muls    d6,d4
  668.     divs    d7,d4
  669.     lsl.w    #8,d4
  670.     add.w    d2,d4
  671.     and.l    #$00ff00,d4    ;G
  672.     move.w    d0,d5
  673.     move.w    d1,d2
  674.     and.w    #$00ff,d5
  675.     and.w    #$00ff,d2
  676.     sub.w    d5,d2
  677.     muls    d6,d2
  678.     divs    d7,d2
  679.     add.w    d5,d2
  680.     and.l    #$0000ff,d2    ;B
  681.     or.l    d3,d2
  682.     or.l    d4,d2    ;color
  683.     rts
  684.  
  685.  
  686.  
  687.  
  688.  
  689. *******************************************************************************
  690. **
  691. **  Load AGA copper with colors
  692. **
  693. **  input:
  694. **  a0.l=24bit color array (00000000RRRRRRRRGGGGGGGGBBBBBBBB per color)
  695. **  a1.l=initialized aga copper array
  696. **  d0.w=start color
  697. **  d1.w=end color
  698. **
  699. *******************************************************************************
  700. LoadAGACopper:    moveq    #0,d2    ;color index to current bank
  701.     sub.w    d0,d1    ;number of colors to load
  702.     move.w    d1,d7    ;color countdown
  703.     move.w    d0,d6
  704.     beq.b    .noskip
  705.     add.w    d0,d0
  706.     add.w    d0,d0
  707.     add.w    d0,a0    ;skip first colors
  708.     move.w    d6,d0
  709.     lsr.w    #5,d0
  710.     mulu    #33*2*4,d0
  711.     add.w    d0,a1    ;skip first banks
  712.     and.w    #$1f,d6
  713. .noskip    addq.w    #4,a1
  714.     clr.w    -(sp)
  715.     lea    (8+1)*4(a1),a2    ;lower nibbles
  716. .next    move.l    (a0)+,d0
  717.     move.l    d0,d3
  718.     move.w    d0,d1
  719.     move.l    d0,d2
  720.     and.w    #$000f,d0
  721.     and.w    #$0f00,d1
  722.     lsr.w    #4,d1
  723.     swap    d2
  724.     and.w    #$f,d2
  725.     lsl.w    #8,d2
  726.     or.w    d2,d1
  727.     or.w    d1,d0
  728.     move.w    d0,2(a2)
  729.     move.l    d3,d0
  730.     move.w    d0,d1
  731.     move.l    d0,d2
  732.     and.w    #$f0,d0
  733.     lsr.w    #4,d0
  734.     move.w    d1,(sp)
  735.     move.b    (sp),d1
  736.     and.w    #$00f0,d1
  737.     swap    d2
  738.     and.w    #$00f0,d2
  739.     lsl.w    #4,d2
  740.     or.w    d2,d1
  741.     or.w    d1,d0
  742.     move.w    d0,2(a1)
  743.     addq.w    #4,a1
  744.     addq.w    #4,a2
  745.     subq.w    #1,d7
  746.     blt.b    .out
  747.     addq.w    #1,d6
  748.     cmp.w    #$20,d6
  749.     bne.b    .next
  750.     lea    34*4(a1),a1
  751.     lea    34*4(a2),a2
  752.     moveq    #0,d6
  753.     bra.b    .next
  754. .out    clr.w    (sp)+
  755.     rts
  756.  
  757. *******************************************************************************
  758. **
  759. **  Init AGA copper-array
  760. **
  761. *******************************************************************************
  762. InitAGACopper:    lea    AGA_Colors,a0
  763.     move.l    #Bplcon3<<16!$0c40,d0
  764.     move.l    #Bplcon3<<16!$0e40,d1
  765.     moveq    #1-1,d7
  766. .loop    move.l    d0,(a0)+
  767.     bsr    .fillit
  768.     move.l    d1,(a0)+
  769.     bsr    .fillit
  770.     add.w    #$2000,d0
  771.     add.w    #$2000,d1
  772.     dbra    d7,.loop
  773.     rts
  774. .fillit    move.w    #Color00,d2
  775.     moveq    #8-1,d6
  776. .fillloop    move.w    d2,(a0)+
  777.     clr.w    (a0)+
  778.     addq.w    #2,d2
  779.     dbra    d6,.fillloop
  780.     rts
  781.  
  782.  
  783.  
  784.  
  785. *******************************************************************************
  786. **
  787. **  Initialiser CodeBuffer
  788. **
  789. *******************************************************************************
  790. InitCodeBuffer:    lea    CodeBuffer,a0
  791.     lea    SinTable,a1
  792.     lea    CosTable,a2
  793.     lea    CodeTable,a3
  794.     lea    PerspTable,a4
  795.     moveq    #0,d0        ;ringsize
  796.     moveq    #0,d1        ;angle
  797.  
  798. .next    move.l    a0,(a3)+
  799.     moveq    #64-1,d7
  800. .loop    moveq    #0,d2
  801.     moveq    #0,d3
  802.     move.w    (a1,d1.w),d2
  803.     move.w    (a2,d1.w),d3
  804.     move.w    d0,d4
  805.     add.w    d4,d4
  806.     move.w    (a4,d4.w),d4
  807.     muls    d4,d2
  808.     muls    d4,d3
  809.     swap    d2
  810.     swap    d3
  811.     rol.l    #2,d2
  812.     rol.l    #2,d3
  813.     muls    #80,d3
  814.     move.w    d2,d4
  815.     asr.w    #3,d4
  816.     add.w    d4,d3        ;byteoffset
  817.     bsr    _GetOpcode
  818.     move.w    d4,(a0)+
  819.     move.w    d3,(a0)+
  820.     add.w    #2048/64,d1
  821.     and.w    #2048-1,d1
  822.     dbra    d7,.loop
  823.     move.w    #$4EF9,(a0)+
  824.     move.l    #RestoreSP,(a0)+
  825.     add.w    #2,d1
  826.     and.w    #2048-1,d1
  827.     addq.w    #1,d0
  828.     cmp.w    #64,d0
  829.     bne.b    .next
  830.  
  831. .next2    move.l    a0,(a3)+
  832.     moveq    #64-1,d7
  833. .loop2    moveq    #0,d2
  834.     moveq    #0,d3
  835.     move.w    (a1,d1.w),d2
  836.     move.w    (a2,d1.w),d3
  837.     move.w    d0,d4
  838.     add.w    d4,d4
  839.     move.w    (a4,d4.w),d4
  840.     muls    d4,d2
  841.     muls    d4,d3
  842.     swap    d2
  843.     swap    d3
  844.     rol.l    #2,d2
  845.     rol.l    #2,d3
  846.     muls    #80,d3
  847.     move.w    d2,d4
  848.     asr.w    #3,d4
  849.     add.w    d4,d3        ;byteoffset
  850.     bsr    _GetOpcode
  851.     move.w    d4,(a0)+
  852.     move.w    d3,(a0)+
  853.     move.w    d4,(a0)+
  854.     add.w    #80,d3
  855.     move.w    d3,(a0)+
  856.     add.w    #2048/64,d1
  857.     and.w    #2048-1,d1
  858.     dbra    d7,.loop2
  859.     move.w    #$4EF9,(a0)+
  860.     move.l    #RestoreSP,(a0)+
  861.     add.w    #2,d1
  862.     and.w    #2048-1,d1
  863.     addq.w    #1,d0
  864.     cmp.w    #64*2,d0
  865.     bne.b    .next2
  866.  
  867. .next3    move.l    a0,(a3)+
  868.     moveq    #64-1,d7
  869. .loop3    moveq    #0,d2
  870.     moveq    #0,d3
  871.     move.w    (a1,d1.w),d2
  872.     move.w    (a2,d1.w),d3
  873.     move.w    d0,d4
  874.     add.w    d4,d4
  875.     move.w    (a4,d4.w),d4
  876.     muls    d4,d2
  877.     muls    d4,d3
  878.     swap    d2
  879.     swap    d3
  880.     rol.l    #2,d2
  881.     rol.l    #2,d3
  882.     push.w    d2/d3
  883.     muls    #80,d3
  884.     move.w    d2,d4
  885.     asr.w    #3,d4
  886.     add.w    d4,d3        ;byteoffset
  887.     bsr    _GetOpcode
  888.     move.w    d4,(a0)+
  889.     move.w    d3,(a0)+
  890.     move.w    d4,(a0)+
  891.     add.w    #80,d3
  892.     move.w    d3,(a0)+
  893.     pull.w    d2/d3
  894.     addq.w    #1,d2
  895.     muls    #80,d3
  896.     move.w    d2,d4
  897.     asr.w    #3,d4
  898.     add.w    d4,d3        ;byteoffset
  899.     bsr    _GetOpcode
  900.     move.w    d4,(a0)+
  901.     move.w    d3,(a0)+
  902.     add.w    #2048/64,d1
  903.     and.w    #2048-1,d1
  904.     dbra    d7,.loop3
  905.     move.w    #$4EF9,(a0)+
  906.     move.l    #RestoreSP,(a0)+
  907.     add.w    #2,d1
  908.     and.w    #2048-1,d1
  909.     addq.w    #1,d0
  910.     cmp.w    #64*3,d0
  911.     bne.b    .next3
  912.  
  913. .next4    move.l    a0,(a3)+
  914.     moveq    #64-1,d7
  915. .loop4    moveq    #0,d2
  916.     moveq    #0,d3
  917.     move.w    (a1,d1.w),d2
  918.     move.w    (a2,d1.w),d3
  919.     move.w    d0,d4
  920.     add.w    d4,d4
  921.     move.w    (a4,d4.w),d4
  922.     muls    d4,d2
  923.     muls    d4,d3
  924.     swap    d2
  925.     swap    d3
  926.     rol.l    #2,d2
  927.     rol.l    #2,d3
  928.     push.w    d2/d3
  929.     muls    #80,d3
  930.     move.w    d2,d4
  931.     asr.w    #3,d4
  932.     add.w    d4,d3        ;byteoffset
  933.     bsr    _GetOpcode
  934.     move.w    d4,(a0)+
  935.     move.w    d3,(a0)+
  936.     move.w    d4,(a0)+
  937.     add.w    #80,d3
  938.     move.w    d3,(a0)+
  939.     pull.w    d2/d3
  940.     addq.w    #1,d2
  941.     muls    #80,d3
  942.     move.w    d2,d4
  943.     asr.w    #3,d4
  944.     add.w    d4,d3        ;byteoffset
  945.     bsr    _GetOpcode
  946.     move.w    d4,(a0)+
  947.     move.w    d3,(a0)+
  948.     move.w    d4,(a0)+
  949.     add.w    #80,d3
  950.     move.w    d3,(a0)+
  951.     add.w    #2048/64,d1
  952.     and.w    #2048-1,d1
  953.     dbra    d7,.loop4
  954.     move.w    #$4EF9,(a0)+
  955.     move.l    #RestoreSP,(a0)+
  956.     add.w    #2,d1
  957.     and.w    #2048-1,d1
  958.     addq.w    #1,d0
  959.     cmp.w    #256,d0
  960.     bne.w    .next4
  961.  
  962.     rts
  963.  
  964. **input:
  965. **  d2.w: bitnummer
  966. **output:
  967. **  d4.w: opcode
  968. _GetOpcode:    and.w    #7,d2
  969.     add.w    d2,d2
  970.     add.w    d2,d2
  971.     move.w    _DotCode(PC,d2.w),d4
  972.     rts
  973.  
  974. _DotCode:    bset    d7,0(a7)
  975.     bset    d6,0(a6)
  976.     bset    d5,0(a5)
  977.     bset    d4,0(a4)
  978.     bset    d3,0(a3)
  979.     bset    d2,0(a2)
  980.     bset    d1,0(a1)
  981.     bset    d0,0(a0)
  982.  
  983.  
  984.  
  985.  
  986. *******************************************************************************
  987. **
  988. **  Clear screen using blitter
  989. **
  990. *******************************************************************************
  991. ClrScr:    move.l    Screen_Clear,d0
  992.     lea    CopBlit1+2,a0
  993.     bsr.b    .insert
  994.     lea    CopBlit2+2,a0
  995.     bsr.b    .insert
  996.     lea    CopBlit3+2,a0
  997. .insert    move.w    d0,4(a0)
  998.     swap    d0
  999.     move.w    d0,(a0)
  1000.     swap    d0
  1001.     add.l    #(288+113+YSpace)*80,d0
  1002.     rts
  1003.  
  1004.  
  1005.  
  1006. *******************************************************************************
  1007. **
  1008. **  Swap screen for doublebuffering!
  1009. **
  1010. *******************************************************************************
  1011. SwapScr:    lea    Screen_Clear+3*4,a0
  1012.     lea    -4(a0),a1
  1013.     move.l    (a1),d7
  1014.     moveq    #3-2,d6
  1015. .cloop    move.l    -(a1),-(a0)
  1016.     dbra    d6,.cloop
  1017.     move.l    d7,(a1)
  1018.  
  1019.     lea    Copper_PlanePtr+2,a3
  1020.     move.l    Screen_Show,d0
  1021.     moveq    #3-1,d7
  1022. .loop    move.w    d0,4(a3)
  1023.     swap    d0
  1024.     move.w    d0,(a3)
  1025.     swap    d0
  1026.     add.l    #(288+113+YSpace)*80,d0
  1027.     addq.w    #8,a3
  1028.     dbra    d7,.loop
  1029.     rts
  1030.  
  1031.  
  1032.  
  1033.  
  1034. *******************************************************************************
  1035. **
  1036. **  Variable
  1037. **
  1038. *******************************************************************************
  1039.     SECTION    VariableTing,bss
  1040.  
  1041.     CNOP    0,4
  1042. _Bss2Start:
  1043. OldSP:    ds.l    1
  1044. MaxRast:    ds.w    1
  1045. VBlank:    ds.b    1
  1046.     IFEQ    Track-0
  1047. IWantOut:    ds.b    1
  1048.     ELSE
  1049. IWantOut:    EQU    $80
  1050.     ds.b    1
  1051.     ENDC
  1052. ColorArray:    ds.l    8
  1053. CodeBuffer:    ds.b    64*(4*64*1+6)
  1054.     ds.b    64*(4*64*2+6)
  1055.     ds.b    64*(4*64*3+6)
  1056.     ds.b    64*(4*64*4+6)
  1057. _CodeBufferEnd:
  1058. CodeTable:    ds.l    256
  1059.  
  1060.     RSRESET
  1061. Ring_BytePos:    rs.w    1
  1062. Ring_BitPos:    rs.b    1
  1063. Ring_Size:    rs.b    1
  1064. Ring_SIZEOF:    rs.b    0
  1065.  
  1066. Ring_Array:    ds.b    NoOfRings*Ring_SIZEOF
  1067. Ring_Counter:    ds.w    1
  1068. Tunnel_YTabPtr:    ds.w    1
  1069. Tunnel_XTabPtr:    ds.w    1
  1070. PerspTable:    ds.w    256
  1071. Story:    ds.w    1
  1072. Ring_Min:    ds.w    1
  1073. Ring_Max:    ds.w    1
  1074. Story_Pause:    ds.w    1
  1075.     CNOP    0,4
  1076. _Bss2End:
  1077.  
  1078.  
  1079.     SECTION    SjovData,data
  1080.  
  1081. Screen_Clear:    dc.l    Screen1
  1082. Screen_Draw:    dc.l    Screen2
  1083. Screen_Show:    dc.l    Screen3
  1084.  
  1085. ;Option nº  = 1
  1086. ;Min. y-val = -1.63840E+04
  1087. ;Max. y-val =  1.63840E+04
  1088. ;Startvalue = min
  1089. ;Length     = 1024
  1090. SinTable:    dc.w    0,101,201,302,402,503,603,704,804,904,1005,1105,1205,1306,1406,1506
  1091.     dc.w    1606,1706,1806,1906,2006,2105,2205,2305,2404,2503,2603,2702,2801,2900,2999,3098
  1092.     dc.w    3196,3295,3393,3492,3590,3688,3786,3883,3981,4078,4176,4273,4370,4467,4563,4660
  1093.     dc.w    4756,4852,4948,5044,5139,5235,5330,5425,5520,5614,5708,5803,5897,5990,6084,6177
  1094.     dc.w    6270,6363,6455,6547,6639,6731,6823,6914,7005,7096,7186,7276,7366,7456,7545,7635
  1095.     dc.w    7723,7812,7900,7988,8076,8163,8250,8337,8423,8509,8595,8680,8765,8850,8935,9019
  1096.     dc.w    9102,9186,9269,9352,9434,9516,9598,9679,9760,9841,9921,10001,10080,10159,10238,10316
  1097.     dc.w    10394,10471,10549,10625,10702,10778,10853,10928,11003,11077,11151,11224,11297,11370,11442,11514
  1098.     dc.w    11585,11656,11727,11797,11866,11935,12004,12072,12140,12207,12274,12340,12406,12472,12537,12601
  1099.     dc.w    12665,12729,12792,12854,12916,12978,13039,13100,13160,13219,13279,13337,13395,13453,13510,13567
  1100.     dc.w    13623,13678,13733,13788,13842,13896,13949,14001,14053,14104,14155,14206,14256,14305,14354,14402
  1101.     dc.w    14449,14497,14543,14589,14635,14680,14724,14768,14811,14854,14896,14937,14978,15019,15059,15098
  1102.     dc.w    15137,15175,15213,15250,15286,15322,15357,15392,15426,15460,15493,15525,15557,15588,15619,15649
  1103.     dc.w    15679,15707,15736,15763,15791,15817,15843,15868,15893,15917,15941,15964,15986,16008,16029,16049
  1104.     dc.w    16069,16088,16107,16125,16143,16160,16176,16192,16207,16221,16235,16248,16261,16273,16284,16295
  1105.     dc.w    16305,16315,16324,16332,16340,16347,16353,16359,16364,16369,16373,16376,16379,16381,16383,16384
  1106. CosTable:    dc.w    16384,16384,16383,16381,16379,16376,16373,16369,16364,16359,16353,16347,16340,16332,16324,16315
  1107.     dc.w    16305,16295,16284,16273,16261,16248,16235,16221,16207,16192,16176,16160,16143,16125,16107,16088
  1108.     dc.w    16069,16049,16029,16008,15986,15964,15941,15917,15893,15868,15843,15817,15791,15763,15736,15707
  1109.     dc.w    15679,15649,15619,15588,15557,15525,15493,15460,15426,15392,15357,15322,15286,15250,15213,15175
  1110.     dc.w    15137,15098,15059,15019,14978,14937,14896,14854,14811,14768,14724,14680,14635,14589,14543,14497
  1111.     dc.w    14449,14402,14354,14305,14256,14206,14155,14104,14053,14001,13949,13896,13842,13788,13733,13678
  1112.     dc.w    13623,13567,13510,13453,13395,13337,13279,13219,13160,13100,13039,12978,12916,12854,12792,12729
  1113.     dc.w    12665,12601,12537,12472,12406,12340,12274,12207,12140,12072,12004,11935,11866,11797,11727,11656
  1114.     dc.w    11585,11514,11442,11370,11297,11224,11151,11077,11003,10928,10853,10778,10702,10625,10549,10471
  1115.     dc.w    10394,10316,10238,10159,10080,10001,9921,9841,9760,9679,9598,9516,9434,9352,9269,9186
  1116.     dc.w    9102,9019,8935,8850,8765,8680,8595,8509,8423,8337,8250,8163,8076,7988,7900,7812
  1117.     dc.w    7723,7635,7545,7456,7366,7276,7186,7096,7005,6914,6823,6731,6639,6547,6455,6363
  1118.     dc.w    6270,6177,6084,5990,5897,5803,5708,5614,5520,5425,5330,5235,5139,5044,4948,4852
  1119.     dc.w    4756,4660,4563,4467,4370,4273,4176,4078,3981,3883,3786,3688,3590,3492,3393,3295
  1120.     dc.w    3196,3098,2999,2900,2801,2702,2603,2503,2404,2305,2205,2105,2006,1906,1806,1706
  1121.     dc.w    1606,1506,1406,1306,1205,1105,1005,904,804,704,603,503,402,302,201,101
  1122.     dc.w    0,-101,-201,-302,-402,-503,-603,-703,-804,-904,-1005,-1105,-1205,-1306,-1406,-1506
  1123.     dc.w    -1606,-1706,-1806,-1906,-2006,-2105,-2205,-2305,-2404,-2503,-2603,-2702,-2801,-2900,-2999,-3098
  1124.     dc.w    -3196,-3295,-3393,-3492,-3590,-3688,-3786,-3883,-3981,-4078,-4176,-4273,-4370,-4467,-4563,-4660
  1125.     dc.w    -4756,-4852,-4948,-5044,-5139,-5235,-5330,-5425,-5520,-5614,-5708,-5803,-5897,-5990,-6084,-6177
  1126.     dc.w    -6270,-6363,-6455,-6547,-6639,-6731,-6823,-6914,-7005,-7096,-7186,-7276,-7366,-7456,-7545,-7635
  1127.     dc.w    -7723,-7812,-7900,-7988,-8076,-8163,-8250,-8337,-8423,-8509,-8595,-8680,-8765,-8850,-8935,-9019
  1128.     dc.w    -9102,-9186,-9269,-9352,-9434,-9516,-9598,-9679,-9760,-9840,-9921,-10001,-10080,-10159,-10238,-10316
  1129.     dc.w    -10394,-10471,-10549,-10625,-10702,-10778,-10853,-10928,-11003,-11077,-11151,-11224,-11297,-11370,-11442,-11514
  1130.     dc.w    -11585,-11656,-11727,-11797,-11866,-11935,-12004,-12072,-12140,-12207,-12274,-12340,-12406,-12472,-12537,-12601
  1131.     dc.w    -12665,-12729,-12792,-12854,-12916,-12978,-13039,-13100,-13160,-13219,-13279,-13337,-13395,-13453,-13510,-13567
  1132.     dc.w    -13623,-13678,-13733,-13788,-13842,-13896,-13949,-14001,-14053,-14104,-14155,-14206,-14256,-14305,-14354,-14402
  1133.     dc.w    -14449,-14497,-14543,-14589,-14635,-14680,-14724,-14768,-14811,-14854,-14896,-14937,-14978,-15019,-15059,-15098
  1134.     dc.w    -15137,-15175,-15213,-15250,-15286,-15322,-15357,-15392,-15426,-15460,-15493,-15525,-15557,-15588,-15619,-15649
  1135.     dc.w    -15679,-15707,-15736,-15763,-15791,-15817,-15843,-15868,-15893,-15917,-15941,-15964,-15986,-16008,-16029,-16049
  1136.     dc.w    -16069,-16088,-16107,-16125,-16143,-16160,-16176,-16192,-16207,-16221,-16235,-16248,-16261,-16273,-16284,-16295
  1137.     dc.w    -16305,-16315,-16324,-16332,-16340,-16347,-16353,-16359,-16364,-16369,-16373,-16376,-16379,-16381,-16383,-16384
  1138.     dc.w    -16384,-16384,-16383,-16381,-16379,-16376,-16373,-16369,-16364,-16359,-16353,-16347,-16340,-16332,-16324,-16315
  1139.     dc.w    -16305,-16295,-16284,-16273,-16261,-16248,-16235,-16221,-16207,-16192,-16176,-16160,-16143,-16125,-16107,-16088
  1140.     dc.w    -16069,-16049,-16029,-16008,-15986,-15964,-15941,-15917,-15893,-15868,-15843,-15817,-15791,-15763,-15736,-15707
  1141.     dc.w    -15679,-15649,-15619,-15588,-15557,-15525,-15493,-15460,-15426,-15392,-15357,-15322,-15286,-15250,-15213,-15175
  1142.     dc.w    -15137,-15098,-15059,-15019,-14978,-14937,-14896,-14854,-14811,-14768,-14724,-14680,-14635,-14589,-14543,-14497
  1143.     dc.w    -14449,-14402,-14354,-14305,-14256,-14206,-14155,-14104,-14053,-14001,-13949,-13896,-13842,-13788,-13733,-13678
  1144.     dc.w    -13623,-13567,-13510,-13453,-13395,-13337,-13279,-13219,-13160,-13100,-13039,-12978,-12916,-12854,-12792,-12729
  1145.     dc.w    -12665,-12601,-12537,-12472,-12406,-12340,-12274,-12207,-12140,-12072,-12004,-11935,-11866,-11797,-11727,-11656
  1146.     dc.w    -11585,-11514,-11442,-11370,-11297,-11224,-11151,-11077,-11003,-10928,-10853,-10778,-10702,-10625,-10549,-10471
  1147.     dc.w    -10394,-10316,-10238,-10159,-10080,-10001,-9921,-9841,-9760,-9679,-9598,-9516,-9434,-9352,-9269,-9186
  1148.     dc.w    -9102,-9019,-8935,-8850,-8765,-8680,-8595,-8509,-8423,-8337,-8250,-8163,-8076,-7988,-7900,-7812
  1149.     dc.w    -7723,-7635,-7545,-7456,-7366,-7277,-7186,-7096,-7005,-6914,-6823,-6731,-6639,-6547,-6455,-6363
  1150.     dc.w    -6270,-6177,-6084,-5990,-5897,-5803,-5708,-5614,-5520,-5425,-5330,-5235,-5139,-5044,-4948,-4852
  1151.     dc.w    -4756,-4660,-4563,-4467,-4370,-4273,-4176,-4078,-3981,-3883,-3786,-3688,-3590,-3492,-3393,-3295
  1152.     dc.w    -3196,-3098,-2999,-2900,-2801,-2702,-2603,-2503,-2404,-2305,-2205,-2105,-2006,-1906,-1806,-1706
  1153.     dc.w    -1606,-1506,-1406,-1306,-1205,-1105,-1005,-904,-804,-704,-603,-503,-402,-302,-201,-101
  1154.     dc.w    0,101,201,302,402,503,603,704,804,904,1005,1105,1205,1306,1406,1506
  1155.     dc.w    1606,1706,1806,1906,2006,2105,2205,2305,2404,2503,2603,2702,2801,2900,2999,3098
  1156.     dc.w    3196,3295,3393,3492,3590,3688,3786,3883,3981,4078,4176,4273,4370,4467,4563,4660
  1157.     dc.w    4756,4852,4948,5044,5139,5235,5330,5425,5520,5614,5708,5803,5897,5990,6084,6177
  1158.     dc.w    6270,6363,6455,6547,6639,6731,6823,6914,7005,7096,7186,7276,7366,7456,7545,7635
  1159.     dc.w    7723,7812,7900,7988,8076,8163,8250,8337,8423,8509,8595,8680,8765,8850,8935,9019
  1160.     dc.w    9102,9186,9269,9352,9434,9516,9598,9679,9760,9841,9921,10001,10080,10159,10238,10316
  1161.     dc.w    10394,10471,10549,10625,10702,10778,10853,10928,11003,11077,11151,11224,11297,11370,11442,11514
  1162.     dc.w    11585,11656,11727,11797,11866,11935,12004,12072,12140,12207,12274,12340,12406,12472,12537,12601
  1163.     dc.w    12665,12729,12792,12854,12916,12978,13039,13100,13160,13219,13279,13337,13395,13453,13510,13567
  1164.     dc.w    13623,13678,13733,13788,13842,13896,13949,14001,14053,14104,14155,14206,14256,14305,14354,14402
  1165.     dc.w    14449,14497,14543,14589,14635,14680,14724,14768,14811,14854,14896,14937,14978,15019,15059,15098
  1166.     dc.w    15137,15175,15213,15250,15286,15322,15357,15392,15426,15460,15493,15525,15557,15588,15619,15649
  1167.     dc.w    15679,15707,15736,15763,15791,15817,15843,15868,15893,15917,15941,15964,15986,16008,16029,16049
  1168.     dc.w    16069,16088,16107,16125,16143,16160,16176,16192,16207,16221,16235,16248,16261,16273,16284,16295
  1169.     dc.w    16305,16315,16324,16332,16340,16347,16353,16359,16364,16369,16373,16376,16379,16381,16383,16384
  1170.  
  1171. Tunnel_YTab:    ;0,360,64,32,0,w,80,y,n
  1172.     DC.W    $0050,$0140,$0230,$0320,$0410,$0500,$05F0,$0690,$0730,$07D0
  1173.     DC.W    $0870,$08C0,$0960,$09B0,$09B0,$09B0,$09B0,$09B0,$09B0,$0960
  1174.     DC.W    $08C0,$0870,$07D0,$0730,$0690,$05F0,$0500,$0410,$0320,$0230
  1175.     DC.W    $0140,$0050,$FFB0,$FEC0,$FDD0,$FCE0,$FBF0,$FB00,$FA10,$F970
  1176.     DC.W    $F8D0,$F830,$F790,$F740,$F6A0,$F650,$F650,$F650,$F650,$F650
  1177.     DC.W    $F650,$F6A0,$F740,$F790,$F830,$F8D0,$F970,$FA10,$FB00,$FBF0
  1178.     DC.W    $FCE0,$FDD0,$FEC0,$FFB0
  1179.  
  1180.  
  1181. Tunnel_XTab:    ;90,450,64,80,0,w,1,y,n
  1182.     DC.W    $004F,$004F,$004D,$004B,$0048,$0044,$0040,$003B,$0035,$002F
  1183.     DC.W    $0029,$0022,$001A,$0013,$000B,$0003,$FFFD,$FFF5,$FFED,$FFE6
  1184.     DC.W    $FFDE,$FFD7,$FFD1,$FFCB,$FFC5,$FFC0,$FFBC,$FFB8,$FFB5,$FFB3
  1185.     DC.W    $FFB1,$FFB1,$FFB1,$FFB1,$FFB3,$FFB5,$FFB8,$FFBC,$FFC0,$FFC5
  1186.     DC.W    $FFCB,$FFD1,$FFD7,$FFDE,$FFE6,$FFED,$FFF5,$FFFD,$0003,$000B
  1187.     DC.W    $0013,$001A,$0022,$0029,$002F,$0035,$003B,$0040,$0044,$0048
  1188.     DC.W    $004B,$004D,$004F,$004F
  1189.  
  1190.  
  1191.  
  1192.  
  1193. JumpCode:    jmp    0
  1194.  
  1195.  
  1196.  
  1197.  
  1198. *******************************************************************************
  1199. **
  1200. **  Og den vildeste copperliste...
  1201. **
  1202. *******************************************************************************
  1203.     SECTION    MyCopper,data_c
  1204.  
  1205. FadeCopper:    dc.w    Bplcon0,$0201
  1206.     dc.w    $1001,$fffe
  1207. .col
  1208. mycol:    dc.w    Color00,0
  1209.     dc.l    -2
  1210.  
  1211. Copper:    dc.w    Bplcon0,$0201
  1212.     dc.w    Bplcon1,$0000
  1213.     dc.w    Bplcon2,$0024
  1214.     dc.w    Bplcon3,$0c40
  1215. ;    dc.w    $01fc,$0000
  1216. ;    dc.w    $01e4,$0000
  1217.  
  1218.     dc.w    Spr0pth,0,Spr0ptl,0
  1219.     dc.w    Spr1pth,0,Spr1ptl,0
  1220.     dc.w    Spr2pth,0,Spr2ptl,0
  1221.     dc.w    Spr3pth,0,Spr3ptl,0
  1222.     dc.w    Spr4pth,0,Spr4ptl,0
  1223.     dc.w    Spr5pth,0,Spr5ptl,0
  1224.     dc.w    Spr6pth,0,Spr6ptl,0
  1225.     dc.w    Spr7pth,0,Spr7ptl,0
  1226.  
  1227. AGA_Colors:    blk.l    (8+1)*2,0
  1228.  
  1229.     dc.w    $1001,$fffe
  1230. Copper_PlanePtr:    dc.w    Bpl1pth,0,Bpl1ptl,0
  1231.     dc.w    Bpl2pth,0,Bpl2ptl,0
  1232.     dc.w    Bpl3pth,0,Bpl3ptl,0
  1233.  
  1234. ;    dc.w    $010c,$0011
  1235.     dc.w    Diwstrt,$2071
  1236.     dc.w    Bplcon0,$3200
  1237.     dc.w    Bplcon2,$0024
  1238.     dc.w    Bplcon3,$0c40
  1239.     dc.w    Diwstop,$40d1
  1240.     dc.w    Ddfstrt,$0030
  1241.     dc.w    Ddfstop,$00d8
  1242.     dc.w    Bplcon1,$0000
  1243.     dc.w    Bpl1mod,80-44
  1244.     dc.w    Bpl2mod,80-44
  1245.  
  1246. ;    dc.w    $01dc,$0020
  1247. ;    dc.w    $01e4,$2100
  1248. ;    dc.w    $01fc,$0003
  1249.  
  1250.     dc.w    $0001,$7ffe        ;WaitBlt
  1251. CopBlit1:    dc.w    Bltdpth,0,Bltdptl,0
  1252.     dc.w    Bltcon0,$0100,Bltcon1,$0000
  1253.     dc.w    Bltdmod,80-44
  1254.     dc.w    Bltsize,288<<6!22
  1255.  
  1256.     dc.w    $0001,$7ffe        ;WaitBlt
  1257. CopBlit2:    dc.w    Bltdpth,0,Bltdptl,0
  1258. ;    dc.w    Bltcon0,$0100,Bltcon1,$0000
  1259. ;    dc.w    Bltdmod,80-44
  1260.     dc.w    Bltsize,288<<6!22
  1261.  
  1262.     dc.w    $0001,$7ffe        ;WaitBlt
  1263. CopBlit3:    dc.w    Bltdpth,0,Bltdptl,0
  1264. ;    dc.w    Bltcon0,$0100,Bltcon1,$0000
  1265. ;    dc.w    Bltdmod,80-44
  1266.     dc.w    Bltsize,288<<6!22
  1267.  
  1268.  
  1269.     dc.l    -2
  1270.     dc.l    -2
  1271.  
  1272.  
  1273.  
  1274.  
  1275. *******************************************************************************
  1276. **
  1277. **  Screens+Gfx
  1278. **
  1279. *******************************************************************************
  1280.     SECTION    Screens,bss_c
  1281.  
  1282.     CNOP    0,4
  1283. _Bss1Start:
  1284.     ds.b    (113+YSpace)*80
  1285. Screen1:    ds.b    288*80
  1286.     ds.b    (113+YSpace)*80
  1287.     ds.b    288*80
  1288.     ds.b    (113+YSpace)*80
  1289.     ds.b    288*80
  1290.     ds.b    (113+YSpace)*80
  1291. Screen2:    ds.b    288*80
  1292.     ds.b    (113+YSpace)*80
  1293.     ds.b    288*80
  1294.     ds.b    (113+YSpace)*80
  1295.     ds.b    288*80
  1296.     ds.b    (113+YSpace)*80
  1297. Screen3:    ds.b    288*80
  1298.     ds.b    (113+YSpace)*80
  1299.     ds.b    288*80
  1300.     ds.b    (113+YSpace)*80
  1301.     ds.b    288*80
  1302.     ds.b    (113+YSpace)*80
  1303.     CNOP    0,4
  1304. _Bss1End:
  1305.  
  1306.  
  1307.  
  1308.  
  1309. *******************************************************************************
  1310. **
  1311. **  Print info on program
  1312. **
  1313. *******************************************************************************
  1314.  
  1315.     PRINTT    '          '
  1316.     PRINTT    'Code buffer size:'
  1317.     PRINTV    _CodeBufferEnd-CodeBuffer
  1318.     PRINTT
  1319.     PRINTT    'Bitmap size:'
  1320.     PRINTV    _Bss1End-_Bss1Start
  1321.     PRINTT
  1322.     PRINTT    'Dots ialt:'
  1323.  
  1324.  
  1325. *******************************************************************************
  1326. **
  1327. **  Hardware registers
  1328. **
  1329. *******************************************************************************
  1330. Bltddat:    EQU    $000
  1331. Dmaconr:    EQU    $002
  1332. Vposr:    EQU    $004
  1333. Vhposr:    EQU    $006
  1334. Dskdatr:    EQU    $008
  1335. Joy0dat:    EQU    $00a
  1336. Joy1dat:    EQU    $00c
  1337. Clxdat:    EQU    $00e
  1338. Adkconr:    EQU    $010
  1339. Pot0dat:    EQU    $012
  1340. Pot1dat:    EQU    $014
  1341. Potgor:    EQU    $016
  1342. Serdatr:    EQU    $018
  1343. Dskbytr:    EQU    $01a
  1344. Intenar:    EQU    $01c
  1345. Intreqr:    EQU    $01e
  1346. Dskpth:    EQU    $020
  1347. Dskptl:    EQU    $022
  1348. Dsklen:    EQU    $024
  1349. Dskdat:    EQU    $026
  1350. Refptr:    EQU    $028
  1351. Vposw:    EQU    $02a
  1352. Vhposw:    EQU    $02c
  1353. Copcon:    EQU    $02e
  1354. Serdat:    EQU    $030
  1355. Serper:    EQU    $032
  1356. Potgo:    EQU    $034
  1357. Joytest:    EQU    $036
  1358. Strequ:    EQU    $038
  1359. Strvbl:    EQU    $03a
  1360. Strhor:    EQU    $03c
  1361. Strlong:    EQU    $03e
  1362. Bltcon0:    EQU    $040
  1363. Bltcon1:    EQU    $042
  1364. Bltafwm:    EQU    $044
  1365. Bltalwm:    EQU    $046
  1366. Bltcpth:    EQU    $048
  1367. Bltcptl:    EQU    $04a
  1368. Bltbpth:    EQU    $04c
  1369. Bltbptl:    EQU    $04e
  1370. Bltapth:    EQU    $050
  1371. Bltaptl:    EQU    $052
  1372. Bltdpth:    EQU    $054
  1373. Bltdptl:    EQU    $056
  1374. Bltsize:    EQU    $058
  1375. Bltcmod:    EQU    $060
  1376. Bltbmod:    EQU    $062
  1377. Bltamod:    EQU    $064
  1378. Bltdmod:    EQU    $066
  1379. Bltcdat:    EQU    $070
  1380. Bltbdat:    EQU    $072
  1381. Bltadat:    EQU    $074
  1382. Dsksync:    EQU    $07e
  1383. Cop1lch:    EQU    $080
  1384. Cop1lcl:    EQU    $082
  1385. Cop2lch:    EQU    $084
  1386. Cop2lcl:    EQU    $086
  1387. Copjmp1:    EQU    $088
  1388. Copjmp2:    EQU    $08a
  1389. Copins:    EQU    $08c
  1390. Diwstrt:    EQU    $08e
  1391. Diwstop:    EQU    $090
  1392. Ddfstrt:    EQU    $092
  1393. Ddfstop:    EQU    $094
  1394. Dmacon:    EQU    $096
  1395. Clxcon:    EQU    $98
  1396. Intena:    EQU    $09a
  1397. Intreq:    EQU    $09c
  1398. Adkcon:    EQU    $09e
  1399. Aud0dat:    EQU    $0aa
  1400. Aud1dat:    EQU    $0ba
  1401. Aud2dat:    EQU    $0ca
  1402. Aud3dat:    EQU    $0da
  1403. Aud0lch:    EQU    $0a0
  1404. Aud1lch:    EQU    $0b0
  1405. Aud2lch:    EQU    $0c0
  1406. Aud3lch:    EQU    $0d0
  1407. Aud0len:    EQU    $0a4
  1408. Aud1len:    EQU    $0b4
  1409. Aud2len:    EQU    $0c4
  1410. Aud3len:    EQU    $0d4
  1411. Aud0per:    EQU    $0a6
  1412. Aud1per:    EQU    $0b6
  1413. Aud2per:    EQU    $0c6
  1414. Aud3per:    EQU    $0d6
  1415. Aud0vol:    EQU    $0a8
  1416. Aud1vol:    EQU    $0b8
  1417. Aud2vol:    EQU    $0c8
  1418. Aud3vol:    EQU    $0d8
  1419. Aud0lcl:    EQU    $0a2
  1420. Aud1lcl:    EQU    $0b2
  1421. Aud2lcl:    EQU    $0c2
  1422. Aud3lcl:    EQU    $0d2
  1423. Bpl1pth:    EQU    $0e0
  1424. Bpl1ptl:    EQU    $0e2
  1425. Bpl2pth:    EQU    $0e4
  1426. Bpl2ptl:    EQU    $0e6
  1427. Bpl3pth:    EQU    $0e8
  1428. Bpl3ptl:    EQU    $0ea
  1429. Bpl4pth:    EQU    $0ec
  1430. Bpl4ptl:    EQU    $0ee
  1431. Bpl5pth:    EQU    $0f0
  1432. Bpl5ptl:    EQU    $0f2
  1433. Bpl6pth:    EQU    $0f4
  1434. Bpl6ptl:    EQU    $0f6
  1435. Bpl7pth:    EQU    $0f8
  1436. Bpl7ptl:    EQU    $0fa
  1437. Bpl8pth:    EQU    $0fc
  1438. Bpl8ptl:    EQU    $0fe
  1439. Bplcon0:    EQU    $100
  1440. Bplcon1:    EQU    $102
  1441. Bplcon2:    EQU    $104
  1442. Bplcon3:    EQU    $106
  1443. Bpl1mod:    EQU    $108
  1444. Bpl2mod:    EQU    $10a
  1445. Bpl1dat:    EQU    $110
  1446. Bpl2dat:    EQU    $112
  1447. Bpl3dat:    EQU    $114
  1448. Bpl4dat:    EQU    $116
  1449. Bpl5dat:    EQU    $118
  1450. Bpl6dat:    EQU    $11a
  1451. Spr0pth:    EQU    $120
  1452. Spr0ptl:    EQU    $122
  1453. Spr1pth:    EQU    $124
  1454. Spr1ptl:    EQU    $126
  1455. Spr2pth:    EQU    $128
  1456. Spr2ptl:    EQU    $12a
  1457. Spr3pth:    EQU    $12c
  1458. Spr3ptl:    EQU    $12e
  1459. Spr4pth:    EQU    $130
  1460. Spr4ptl:    EQU    $132
  1461. Spr5pth:    EQU    $134
  1462. Spr5ptl:    EQU    $136
  1463. Spr6pth:    EQU    $138
  1464. Spr6ptl:    EQU    $13a
  1465. Spr7pth:    EQU    $13c
  1466. Spr7ptl:    EQU    $13e
  1467. Spr0pos:    EQU    $140
  1468. Spr0ctl:    EQU    $142
  1469. Spr0data:    EQU    $144
  1470. Spr0datb:    EQU    $146
  1471. Spr1pos:    EQU    $148
  1472. Spr1ctl:    EQU    $14a
  1473. Spr1data:    EQU    $14c
  1474. Spr1datb:    EQU    $14e
  1475. Spr2pos:    EQU    $150
  1476. Spr2ctl:    EQU    $152
  1477. Spr2data:    EQU    $154
  1478. Spr2datb:    EQU    $156
  1479. Spr3pos:    EQU    $158
  1480. Spr3ctl:    EQU    $15a
  1481. Spr3data:    EQU    $15c
  1482. Spr3datb:    EQU    $15e
  1483. Spr4pos:    EQU    $160
  1484. Spr4ctl:    EQU    $162
  1485. Spr4data:    EQU    $164
  1486. Spr4datb:    EQU    $166
  1487. Spr5pos:    EQU    $168
  1488. Spr5ctl:    EQU    $16a
  1489. Spr5data:    EQU    $16c
  1490. Spr5datb:    EQU    $16e
  1491. Spr6pos:    EQU    $170
  1492. Spr6ctl:    EQU    $172
  1493. Spr6data:    EQU    $174
  1494. Spr6datb:    EQU    $176
  1495. Spr7pos:    EQU    $178
  1496. Spr7ctl:    EQU    $17a
  1497. Spr7data:    EQU    $17c
  1498. Spr7datb:    EQU    $17e
  1499. Color00:    EQU    $180
  1500. Color01:    EQU    $182
  1501. Color02:    EQU    $184
  1502. Color03:    EQU    $186
  1503. Color04:    EQU    $188
  1504. Color05:    EQU    $18a
  1505. Color06:    EQU    $18c
  1506. Color07:    EQU    $18e
  1507. Color08:    EQU    $190
  1508. Color09:    EQU    $192
  1509. Color10:    EQU    $194
  1510. Color11:    EQU    $196
  1511. Color12:    EQU    $198
  1512. Color13:    EQU    $19a
  1513. Color14:    EQU    $19c
  1514. Color15:    EQU    $19e
  1515. Color16:    EQU    $1a0
  1516. Color17:    EQU    $1a2
  1517. Color18:    EQU    $1a4
  1518. Color19:    EQU    $1a6
  1519. Color20:    EQU    $1a8
  1520. Color21:    EQU    $1aa
  1521. Color22:    EQU    $1ac
  1522. Color23:    EQU    $1ae
  1523. Color24:    EQU    $1b0
  1524. Color25:    EQU    $1b2
  1525. Color26:    EQU    $1b4
  1526. Color27:    EQU    $1b6
  1527. Color28:    EQU    $1b8
  1528. Color29:    EQU    $1ba
  1529. Color30:    EQU    $1bc
  1530. Color31:    EQU    $1be
  1531. _Custom:    EQU    $dff000
  1532.  
  1533.  
  1534.  
  1535.  
  1536. *******************************************************************************
  1537. **
  1538. **  Interrupt addresses
  1539. **
  1540. *******************************************************************************
  1541. Lev1Base:    EQU    $64
  1542. Lev2Base:    EQU    $68
  1543. Lev3Base:    EQU    $6c
  1544. Lev4Base:    EQU    $70
  1545. Lev5Base:    EQU    $74
  1546. Lev6Base:    EQU    $78
  1547. Lev7Base:    EQU    $7c
  1548. Trap0:    EQU    $80
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.